﻿using Ortodoctor.gridComponent;
using Ortodoctor.modelo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Ortodoctor.Funcionario
{
    public partial class CadastroLogin : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["USUARIO"] == null)
            {
                Response.Redirect("Login.aspx");
            }
            if (Session["USUARIO_ACESSO"].ToString().CompareTo("2")==0)
            {
      
                modeloUsuario model = new modeloUsuario();
                Grid grid = new Grid(model.getAll(), "id_usuario");
                Session["LOGIN"] = grid;

                selectID.ClientIDMode = System.Web.UI.ClientIDMode.Static;
                ModeloClinica modelo = new ModeloClinica();
                DataTable dt = modelo.getAll();
                dt.DefaultView.Sort = "[cidade] ASC";
                dt = dt.DefaultView.ToTable();

                foreach (DataRow dr in dt.Rows)
                {
                    selectID.Items.Add(new ListItem(dr["cidade"].ToString(), dr["id_clinica"].ToString()));
                }
            }
            else
            {
                permissao.Value = "Você não tem permissão para visualizar essa página";
            }
        }

        [WebMethod]
        public static string getDados(string page, string rp, string sortname, string sortorder, string query, string qtype)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["LOGIN"]);
            grid.page = Convert.ToInt32(page);
            DataTable dt = grid.dados.Clone();

            if (string.IsNullOrEmpty(query))
            {
                int numeroItensPagina = Convert.ToInt32(rp);
                int numeroPagina = Convert.ToInt32(page);
                int inicio = numeroItensPagina * (numeroPagina - 1);

                for (int i = inicio; i < inicio + numeroItensPagina && i < grid.dados.Rows.Count; ++i)
                {
                    DataRow dr = dt.NewRow();
                    foreach (DataColumn dc in dt.Columns)
                        dr[dc.ColumnName] = grid.dados.Rows[i][dc.ColumnName];

                    dt.Rows.Add(dr);
                }
                if (dt.Rows.Count > 0)
                {
                    dt.DefaultView.Sort = sortname + " " + sortorder;
                    dt = dt.DefaultView.ToTable();
                }
            }
            else
            {
                dt = grid.dados.Copy();
                dt.DefaultView.RowFilter = string.Format("[{0}]  like '%{1}%'", qtype, query);
                dt = dt.DefaultView.ToTable();
            }
            return grid.getDadosToJson(dt);
        }

        [WebMethod]
        public static string addToTable(string dados)
        {
            string[] array = dados.Split('|');
            modeloUsuario model = new modeloUsuario();
            int id = model.insert(new Componentes.Usuario(-1, 
                                                 Convert.ToInt32(array[0]), 
                                                 array[1].ToString(), 
                                                 array[2].ToString(), 
                                                 Convert.ToInt32(array[4])));
            ModeloClinica modelo = new ModeloClinica();
            DataTable dt = modelo.getClinica(Convert.ToInt32(array[0]));
            Grid grid = ((Grid)HttpContext.Current.Session["LOGIN"]);
            DataRow dr = grid.dados.NewRow();
            dr["id_usuario"] = id;
            dr["cidade"] = dt.Rows[0]["cidade"];//array[0].ToString();
            dr["login"] = array[1].ToString();
            dr["nivel_acesso"] = array[4].ToString();

            grid.dados.Rows.Add(dr);
            grid.total++;
            HttpContext.Current.Session["LOGIN"] = grid;
            return "adicionou";
        }

        [WebMethod]
        public static string editTable(int id, string dados)
        {
            string[] array = dados.Split('|');
            modeloUsuario model = new modeloUsuario();
            model.update(new Componentes.Usuario(id,
                                                 Convert.ToInt32(array[0]),
                                                 array[1].ToString(),
                                                 array[2].ToString(),
                                                 Convert.ToInt32(array[4])));

            Componentes.Usuario u = new Componentes.Usuario(id,
                                                 Convert.ToInt32(array[0]),
                                                 array[1].ToString(),
                                                 array[2].ToString(),
                                                 Convert.ToInt32(array[4]));
            model = new modeloUsuario();
            model.Log("Atualização", "Usuário " + HttpContext.Current.Session["ID_USUARIO_ACESSO"] + " - " + HttpContext.Current.Session["USUARIO"] + " fez alterações no Usuario " + id + " - " + u.Login);

            modeloFuncionario modelo = new modeloFuncionario();
            Grid grid = ((Grid)HttpContext.Current.Session["LOGIN"]);
            DataRow[] srw = grid.dados.Select("[id_usuario] = " + id.ToString());
                            
            DataRow dr = srw[0];
            dr["senha"] = dr["senha"];//array[0].ToString();
            dr["login"] = array[1].ToString();
            dr["nivel_acesso"] = array[4].ToString();
            dr["cidade"] = dr["cidade"];//array[4].ToString();

            HttpContext.Current.Session["LOGIN"] = grid;
            return "editou";
        }

        [WebMethod]
        public static string deleteFromTable(int id)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["LOGIN"]);
            grid.deleteFromTable(id);
            modeloUsuario usuario = new modeloUsuario();
            String nomeDeletado = (String)usuario.getUsuario(id).Rows[0]["login"];
            usuario = new modeloUsuario();
            usuario.delete(id);
            usuario = new modeloUsuario();
            usuario.Log("Deleção", "Usuário " + HttpContext.Current.Session["ID_USUARIO_ACESSO"] + " - " + HttpContext.Current.Session["USUARIO"] + " deletou o Usuário " + id + " - " + nomeDeletado);

            HttpContext.Current.Session["LOGIN"] = grid;
            return "removeu";
        }

        [WebMethod]
        public static string getDataFromUser(int id)
        {
            modeloUsuario user = new modeloUsuario();
            DataTable dt = user.getUsuario(id);
            string retorno = "";

            if (dt.Rows.Count > 0)
            {
                retorno += dt.Rows[0]["id_clinica"].ToString() + "|";
                retorno += dt.Rows[0]["senha"].ToString() + "|";
                retorno += dt.Rows[0]["login"].ToString() + "|";
                retorno += dt.Rows[0]["nivel_acesso"].ToString();
            }

            return retorno;
        }
    }
}